ZigZag Conversion
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this
P A H N
A P L S I I G
Y I R
题目大意:给定一个字符串,按Z形排列,按行输出排列结果,convert("PAYPALISHIRING", 3) => "PAHNAPLSIIGYIR",Z形列数是可变的。
题目难度:Easy
/**
 * Created by gzdaijie on 16/5/4
 * 找规律的题目,当然也可以构造二维字符串
 * 周期是2 * numsRows - 1, 同一周期内,第j列下一个数为i + (numsRows * 2 - j)
 */
public class Solution {
    public String convert(String s, int numRows) {
        if (numRows == 1 || s == null) return s;
        String result = ""; // 换做字符数组会更快一些
        int len = s.length();
        int step = 2 * numRows - 2;
        for (int j = 1; j <= numRows ; j++) {
            for (int i = j; i <= len; i += step) {
                result += s.charAt(i - 1);
                if (j != 1 && j != numRows) {
                    int t = (numRows - j) * 2 + i;
                    if (t <= len) {
                        result += s.charAt(t - 1);
                    }
                }
            }
        }
        return result;
    }
}